/**
 * 微信公众号相关方法
 * @author 许明浩 微信: muaiyuese
 */
import { ApiGetSign } from "@/api/auth";
import { instance as Log } from "../log";
import Taro from "@tarojs/taro";

export const appId = process.env.WECHAT_APPID;
/**
 * 初始化微信
 * @param {}
 * @return
 */
export const wxConfigInit = () => {
  return new Promise((resolse, reject) => {
    ApiGetSign({ url: window.location.origin, appId })
      .then((res) => {
        const { wx } = window as any;
        const { timestamp, nonceStr, signature } = res?.data || {};
        Log.log("开始签名", { timestamp, nonceStr, signature });
        wx &&
          wx.config({
            debug: false, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来，若要查看传入的参数，可以在 pc 端打开，参数信息会通过 log 打出，仅在 pc 端时才会打印。
            appId, // 必填，公众号的唯一标识
            timestamp, // 必填，生成签名的时间戳
            nonceStr, // 必填，生成签名的随机串
            signature, // 必填，签名
            jsApiList: [
              // 全部要调用的 API 都要加到这个列表中
              "checkJsApi",
              "onMenuShareTimeline",
              "onMenuShareAppMessage",
              "onMenuShareQQ",
              "onMenuShareWeibo",
              "onMenuShareQZone",
            ], // 必填，需要使用的 JS 接口列表
          });
        wx &&
          wx.ready((e) => {
            resolse(e);
          });
        wx &&
          wx.error(() => {
            reject();
          });
      })
      .catch((e) => {
        Taro.showToast({
          title: e.message || "获取微信公众号签名失败",
          icon: "none",
          duration: 2000,
        });
      });
  });
};

/**
 * 微信网页认证授权-非静默
 * @param {}
 * @return
 */
export const authSnsapiUserinfo = ({ redirect_uri = "" }) => {
  window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo#wechat_redirect`;
};

/**
 * 微信分享
 * @param {}
 * @return
 */
export const share = (param) => {
  const { wx } = window as any;

  // 分享朋友圈 - 新版本
  wx.updateTimelineShareData({
    title: param.title, // 分享标题
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 分享朋友圈
  wx.onMenuShareTimeline({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 分享给朋友 - 新版本
  wx.updateAppMessageShareData({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 分享给朋友
  wx.onMenuShareAppMessage({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    type: "", // 分享类型,music、video或link，不填默认为link
    dataUrl: "", // 如果type是music或video，则要提供数据链接，默认为空
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 获取“分享到QQ”
  wx.onMenuShareQQ({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 获取“分享到QQ空间”
  wx.onMenuShareQZone({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });

  // 获取“分享到腾讯微博”
  wx.onMenuShareWeibo({
    title: param.title, // 分享标题
    desc: param.desc, // 分享描述
    link: param.link, // 分享链接
    imgUrl: param.imgUrl, // 分享图标
    success() {
      // 用户确认分享后执行的回调函数
      Log.log("分享成功", param);
    },
    cancel() {
      // 用户取消分享后执行的回调函数
      Log.log("分享失败", param);
    },
  });
};
